package com.huwei.activemq.controller;

import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author: 胡伟
 * @Date: 2021/1/13 18:10
 * @Description:
 */
@RestController
@RequestMapping("/test")
public class TestController {
    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    @GetMapping("sendSynMsg")
    public String sendSynMsg(@RequestParam("msg") String msg){
        /**
         * 发送可靠同步消息 ,可以拿到SendResult 返回数据
         * 同步发送是指消息发送出去后，会在收到mq发出响应之后才会发送下一个数据包的通讯方式。
         * 这种方式应用场景非常广泛，例如重要的右键通知、报名短信通知、营销短信等。
         *
         * 参数1： topic:tag
         * 参数2:  消息体 可以为一个对象
         * 参数3： 超时时间 毫秒
         */
        SendResult result = rocketMQTemplate.syncSend("topic_huwei",msg,10000);
        System.out.println(result);
        return "success";
    }
    @GetMapping("sendAsyncSend")
    public void sendAsyncSend(@RequestParam("msg") String msg){
        /**
         * 发送 可靠异步消息
         * 发送消息后，不等mq响应，接着发送下一个数据包。发送方通过设置回调接口接收服务器的响应，并可对响应结果进行处理。
         * 异步发送一般用于链路耗时较长，对于RT响应较为敏感的业务场景，例如用户上传视频后通过启动转码服务，转码完成后通推送转码结果。
         *
         * 参数1： topic:tag
         * 参数2:  消息体 可以为一个对象
         * 参数3： 回调对象
         * 当然也可以加上超时时间 毫秒
         */
        //前置验证
        //扣库存
        //mq--->

        rocketMQTemplate.asyncSend("topic_huwei", msg, new SendCallback() {
            //这里的成功指的是,服务器接收到此消息并已存入消息队列则算成功,不是指的消息被消费才触发


            public void onSuccess(SendResult sendResult) {
                //直接发卡
                System.out.println("我他妈的成功发送了");
            }
            //失败时我做什么
            public void onException(Throwable throwable) {

                System.out.println("我发送他妈的失败了");
            }
        },10000);
    }
}
